PY Music Box软件设计
一、软件架构
-
系统架构简介 使用hack版PY32F002的芯片Air001来实现,便宜量又大。M0架构,48MHz+32K Flash+4K RAM,价格<0.6RMB
-
系统架构框图
二、模块分析
使用MDK + Air001 SDK LL 库.
-
BSP部分 串口+LED+按键(AD Key)+Systick(延时程序用)
-
SPI部分 SPI1接口,软硬spi驱动,使能分别对应flash/sd/rf2401(未单独引出)
-
wav解码部分 playwav.c(读取和输出接口) 和 adpcm.c(ima-adpcm编解码)
-
录音部分 TOD
-
混音部分 TOD
-
无线传输部分 计划使用芯岭科技的XL2400(RMB~0.7),他家还有XL2401~XL2409(RMB1.3~1.9)的各种SOC,分别封装的NY8,51和M0内核
三、关键代码
四、采坑
- 超频(24M->48M)需谨慎,需要修改flash等待为1.可以直接使用Air001的模版。操作不当容易变砖.
- PY25H80的flash芯片有多重模式,扇区大小也不同,当选择快速读取指令时前面会多一个0x00的脏数据,不知何解。
-
硬件SPI速度快,初始化代码如下:
/* SPI1 参数配置*/ SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX; SPI_InitStruct.Mode = LL_SPI_MODE_MASTER; SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT; SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_HIGH; SPI_InitStruct.ClockPhase = LL_SPI_PHASE_2EDGE; //这里很重要,不然收码不对 SPI_InitStruct.NSS = LL_SPI_NSS_SOFT; SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV8; SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST; LL_SPI_Init(SPI1, &SPI_InitStruct);
-
串口下载flash的时候,最后每包的补足为需要为0x00,否则校验码会错误(累加校验).
- 如果下载文件大小超出flash容量会重复覆盖。
- 下载速度,文件大小633KB:
- Uart-1M + SPI-6M =35~40秒
- Uart-512K + SPI-6M =45秒
- 上位机触发进入下载模式的函数要优化,要多发送几次并排除乱码